import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' import { AlertCircle } from 'lucide-react' import { Alert, AlertDescription, AlertTitle } from 'ui' import { Admonition } from 'ui-patterns' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, PageHeaderMeta, PageHeaderNavigationTabs, PageHeaderSummary, PageHeaderTitle, } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' import DatabaseBackupsNav from '@/components/interfaces/Database/Backups/DatabaseBackupsNav' import { PITRNotice } from '@/components/interfaces/Database/Backups/PITR/PITRNotice' import { PITRSelection } from '@/components/interfaces/Database/Backups/PITR/PITRSelection' import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' import DefaultLayout from '@/components/layouts/DefaultLayout' import AlertError from '@/components/ui/AlertError' import { DocsButton } from '@/components/ui/DocsButton' import NoPermission from '@/components/ui/NoPermission' import { UpgradeToPro } from '@/components/ui/UpgradeToPro' import { useBackupsQuery } from '@/data/database/backups-query' import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements' import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' import { useIsOrioleDbInAws, useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { DOCS_URL, PROJECT_STATUS } from '@/lib/constants' import type { NextPageWithLayout } from '@/types' const DatabasePhysicalBackups: NextPageWithLayout = () => { return ( <> Database Backups
) } DatabasePhysicalBackups.getLayout = (page) => ( {page} ) const PITR = () => { const { ref: projectRef } = useParams() const { data: project } = useSelectedProjectQuery() const { hasAccess: hasAccessToPitr, isLoading: isLoadingEntitlements } = useCheckEntitlements('pitr.available_variants') const isOrioleDbInAws = useIsOrioleDbInAws() const { data: backups, error, isPending: isLoadingBackups, isError, isSuccess, } = useBackupsQuery({ projectRef }) const isLoading = isLoadingBackups || isLoadingEntitlements const isEnabled = backups?.pitr_enabled const isActiveHealthy = project?.status === PROJECT_STATUS.ACTIVE_HEALTHY const { can: canReadPhysicalBackups, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( PermissionAction.READ, 'physical_backups' ) if (isPermissionsLoaded && !canReadPhysicalBackups) { return } if (isOrioleDbInAws) { return ( ) } return ( <> {isLoading && } {isError && } {isSuccess && ( <> {!isEnabled ? ( ) : !isActiveHealthy ? ( Point in Time Recovery is not available while project is offline Your project needs to be online to restore your database with Point in Time Recovery ) : ( <> )} )} ) } export default DatabasePhysicalBackups